#-*- coding:utf-8 -*-
'''
Created on 25.02.2010

@author: hu1salh1
'''

import Termpar_PAUK_Class
# Import from Python
import os
#import tempfile
from SQL_PAUK_Class import SQL_PAUK
from LOG_PAUK_Class import LOGfile
import sys
import time
SqL=SQL_PAUK()

def innerExcept(ne):
    print "Error № %s"% ne
def run():
    #--- обработка параметров из консоли
    (option,args)=Termpar_PAUK_Class.parse_args()
    #--- блок обработки пареметров к названию таблиц БД
    if option.table=='dev':
        table='frame_device'
    elif option.table=='user':
        table='uses'
    elif option.table=='room':
        table='frame_status'
    elif option.table=='rule':
        table='rule_monitor'

    #--- блок обработки параметров сортировки полей в БД
    sort_all={}
    if option.s_ip:
        sort_all['ip_frame']=option.s_ip
    if option.s_dev:
        sort_all['caption_device']=option.s_dev
    if option.s_frm:
        sort_all['caption_frame']=option.s_frm
    if option.s_mac:
        sort_all['mac_frame']=option.s_mac
    if option.s_inv:
        sort_all['inventory_number_frame']=option.s_inv
                    # Продумать если вводить диапазон дат между указанными в параметре!!!!!!!
    if option.log:
        global LOG
        if option.log==True:
            LOG=LOGfile(option.log_name)
    #---блок обработки параметров упорядочивания ответов
    abc_lst=['desc','asc']
    if option.abc in abc_lst:
        abc=option.abc
    else: innerExcept(3)
    #---блок регулирования вывода строк в зависимости от таблицы
    row_cnt=0
    limit_start=0 #переменная для того чтобы запоминать с какой строки начинать следующую группу вывода на экран
    
    global total_count
    if option.table=='dev':
        row_cnt=True
        fields=['caption_device' , 'caption_frame' , 'ip_frame' , 'mac_frame' , 'inventory_number_frame' , 'write_time']
        #---вычисляем сколько всего строк в результате работы запроса
        total_count = SqL.select_device(fields,table,sort_all,abc,row_cnt,limit_start,limit_count=99999999)
    elif option.table=='user':
        pass
    #---определение количества строк для запроса в таблицу 'user'
    elif option.table=='room':
        pass
    #---определение количества строк для запроса в таблицу 'room'
    elif option.table=='rule':
        pass
    #---определение количества строк для запроса в таблицу 'rule'
    
    if option.n_count>30:#---30 количество строк для вывода на экран
        limit_count=30  # 30 количество строк для вывода на ЭКРАН!!!
    else: limit_count=option.n_count
    if option.log==True:#если вывод в лог то зачем групировать по 15 строк
        limit_count=total_count

    row_cnt=False
    
    for limit_start in xrange(0,total_count,limit_count):
        #---формирование результата для таблицы DEVICE
        if option.table=='dev':
            fields=['caption_device' , 'caption_frame' , 'ip_frame' , 'mac_frame' , 'inventory_number_frame' , 'write_time']
            karteg=SqL.select_device(fields,table,sort_all,abc,row_cnt,limit_start,limit_count)
            #---дробление данных из картежа построчно в переменные
            for stroka in karteg:
                vremya=time.strftime("%x_%X",stroka[-1].timetuple())
                dev = stroka[0].encode('utf8')
                comp= stroka[1].encode('utf8')
                ip=stroka[2].encode('utf8')
                mac=stroka[3].encode('utf8')
                if stroka[4]==None:
                    invent='None'
                else:invent=stroka[4].encode('utf8')
                #---выяснение режима вывода данных 
                if option.f_ip or option.f_mac or option.f_time or option.f_frm or option.f_dev or option.f_inv != False:
                    # uznat chto inventarizyruetsa comp ili device
                    fragment=[]
                    if option.f_ip:
                        fragment.append(str(ip))
                    if option.f_mac:
                        fragment.append(str(mac))
                    if option.f_time:
                        fragment.append(str(vremya))
                    if option.f_frm:
                        fragment.append(str(comp))
                    if option.f_inv:
                        fragment.append(str(invent))
                    if option.f_dev:
                        if isinstance(dev, unicode):
                            dev=dev.encode('utf8') # выяснить проблему с кодировкой кирилицы в консоли - в консоли кодировка cp866
                        fragment.append(str(dev))
                    #---вывод конкретных полей
                    line= '|'.join(fragment)
                if option.all_field:
                    #---вывод всех полей
                    line= str(ip)+'|'+str(mac)+'|'+str(vremya)+'|'+str(comp)+'|'+str(invent)+'|'+str(dev)  #"output result"

                #---передача данных построчно в модуль логирования
                if option.log:
                    LOG.outputlog(line)
                #---вывод данных на экран
                else: print line

        if option.log==False:
            raw_input('press enter')
        #---формирование результатов в таблицу USER
        if option.table=='user':
            print "No DEV table"
        #---формирование результатов после поиска по имени пользователя
        if option.user_frame:# теоретически верно
            result=SqL.find_user_frame(str(option.user_frame))
            if isinstance(result, unicode):
                result=result.encode('utf8')
            for x in result:
                print x
        #---формирование результатов после поиска по названию компьютера
        if option.frame_user:# теоретически верно
            result=SqL.find_frame_user(str(option.frame_user))
            if isinstance(result, unicode):
                result=result.encode('utf8')
            for x in result:
                print x
        #---формирование результатов после поиска компьютера по номеру комнаты
        if option.room_frame:# теоретически верно
            result=SqL.find_room_frame(str(option.room_frame))
            if isinstance(result, unicode):
                result=result.encode('utf8')
            for x in result:
                print x
        #---формирование результатов после поиска пользователя по номеру комнаты
        if option.room_user:# теоретически верно
            result=SqL.find_room_user(str(option.room_user))
            if isinstance(result, unicode):
                result=result.encode('utf8')
            for x in result:
                print x
        

               
'''

    if options.output is None:
        print output
    else:
        open(options.output, 'w').write(output)
'''

try:
	if __name__ == '__main__':
		run()
except:
	sys.argv[0]
